package yto.freemarker.springaop.servlet;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

/**
 * 创建DispatcherServlet
 *
 * 1、在web.xml文件中有<Servlet></Servlet>
 * 2、使用注解@WebServlet
 * 3、new DispatcherServlet()
 *
 * @author dongxing
 **/
@Slf4j
public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {

        log.info("Spring init---begin----");
        //web.xml文件的中的spring监听器（ContextLoaderListener）
        // 其实就是初始化spring的环境
        AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext
                = new AnnotationConfigWebApplicationContext();
        //注册Bean
        annotationConfigWebApplicationContext.register(AppConfig.class);
        /**
         * refresh方法和@EnableWebMvc相冲突
         * @EnableWebMvc加在实现WebMvcConfigurer接口上
         */
        //刷新。很重要，是spring的核心方法
//        annotationConfigWebApplicationContext.refresh();

        log.info("Spring init---end----");

        log.info("DispatcherServlet create---begin----");
        //创建dispatcher
        DispatcherServlet dispatcherServlet = new DispatcherServlet(annotationConfigWebApplicationContext);
        //将DispatcherServlet添加进去
        ServletRegistration.Dynamic app = servletContext.addServlet("app", dispatcherServlet);
        //启动的时候，调用dispatcher的init的方法
        app.setLoadOnStartup(1);
        //添加拦截规则（拦截哪些请求）
        app.addMapping("*.do");
        log.info("DispatcherServlet create---end----");

    }
}
